package com.dek.seckill.controller;

import com.dek.seckill.common.mq.MQProducer;
import com.dek.seckill.common.redis.GoodsKey;
import com.dek.seckill.common.redis.RedisService;
import com.dek.seckill.entity.GoodsMessage;
import org.springframework.beans.factory.annotation.Autowired;

public class OrderInfoService {

    @Autowired
    MQProducer mqProducer;
    @Autowired
    RedisService redisService;


    /**
     * 1、系统初始化时，在redis中初始化商品库存
     * 2、用户下单时 redis中预减库存， 若库存已减完，后面的请求则全部失败
     * 3、将用户请求数据存入rabbitmq中，返回排队中
     * 4、rabbitmq处理生成订单相关数据
     * 5、客户端轮询  下单结果api
     *
     *
     * @param goodsId
     * @param user
     */
    public void seckill(String goodsId, String user) {
        // 系统初始化时，缓存库存， 缓存中库存减1
        long stock = redisService.decr(GoodsKey.goodsStock, goodsId);
        if (stock < 0) {
            return;
        }
        // 请求入队
        GoodsMessage message = new GoodsMessage();
        message.setGoodsId(goodsId);
        message.setUser(user);

        mqProducer.produceSeckill(message);
        // 返回排队中
        return;


    }


}
